package com.example.shutdown_v1.dto;

import lombok.Data;
import java.util.List;

/**
 * MQTT消息数据结构
 * 对应JSON格式的MQTT消息
 */
@Data
public class MqttMessage {
    /**
     * 版本号
     */
    private Integer v;
    
    /**
     * 消息ID
     */
    private Integer mid;
    
    /**
     * 时间戳
     */
    private Long time;
    
    /**
     * IP地址
     */
    private String ip;
    
    /**
     * MAC地址（网关标识）
     */
    private String mac;
    
    /**
     * 设备数据数组
     * 格式：devices[i] = [设备类型, 传感器MAC, 字段2, 字段3, 十六进制数据, 信号强度, 电量]
     * devices[0][1] = 传感器MAC地址
     * devices[0][4] = 十六进制字符串（73字节）
     * devices[0][5] = 信号强度（RSSI）
     * devices[0][6] = 电池电量（可选，0-100）
     */
    private List<List<Object>> devices;
    
    /**
     * 电池电量（外层字段，可选）
     */
    private Integer battery;
    
    /**
     * 获取网关MAC地址
     * @return 网关MAC地址（从外层mac字段）
     */
    public String getGatewayMac() {
        return this.mac;
    }
    
    /**
     * 获取传感器MAC地址
     * @return 传感器MAC地址（从devices[0][1]获取）
     */
    public String getSensorMac() {
        if (devices != null && !devices.isEmpty()) {
            List<Object> device = devices.get(0);
            if (device != null && device.size() > 1) {
                Object sensorMac = device.get(1);
                return sensorMac != null ? sensorMac.toString() : null;
            }
        }
        return null;
    }
    
    /**
     * 获取十六进制数据字符串
     * @return 十六进制字符串（73字节）
     */
    public String getHexData() {
        if (devices != null && !devices.isEmpty()) {
            List<Object> device = devices.get(0);
            if (device != null && device.size() > 4) {
                return device.get(4).toString();
            }
        }
        return null;
    }
    
    /**
     * 获取信号强度（RSSI）
     * @return 信号强度值（dBm）
     */
    public Integer getRssi() {
        if (devices != null && !devices.isEmpty()) {
            List<Object> device = devices.get(0);
            if (device != null && device.size() > 5) {
                Object rssi = device.get(5);
                if (rssi instanceof Number) {
                    return ((Number) rssi).intValue();
                }
            }
        }
        return null;
    }
    
    /**
     * 获取电池电量
     * 优先从devices数组中获取，其次从外层battery字段获取
     * @return 电池电量百分比（0-100），如果不可用返回null
     */
    public Integer getBatteryLevel() {
        // 方式1: 从devices数组的第7个元素获取（索引6）
        if (devices != null && !devices.isEmpty()) {
            List<Object> device = devices.get(0);
            if (device != null && device.size() > 6) {
                Object batteryObj = device.get(6);
                if (batteryObj instanceof Number) {
                    return ((Number) batteryObj).intValue();
                }
            }
        }
        
        // 方式2: 从外层battery字段获取
        if (this.battery != null) {
            return this.battery;
        }
        
        return null;  // 电量信息不可用
    }
}

